//
// Copyright (c) 2011 Alex Nesterenko
//

#ifndef NANE_OGLAPI_H
#   define  NANE_OGLAPI_H

#   include "nane/RenderSystem/ogl/gl.h"
#   include "nane/RenderSystem/ogl/glext.h"
#   include "nane/core/crt/DynamicModule.h"

typedef void*(APIENTRY *PFNGLXGETPROCADDRESS)( const char* procName );
typedef void (APIENTRY *PFNGLCLEARINDEX)( GLfloat c );
typedef void (APIENTRY *PFNGLCLEARCOLOR)( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha );
typedef void (APIENTRY *PFNGLCLEAR)( GLbitfield mask );
typedef void (APIENTRY *PFNGLINDEXMASK)( GLuint mask );
typedef void (APIENTRY *PFNGLCOLORMASK)( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha );
typedef void (APIENTRY *PFNGLALPHAFUNC)( GLenum func, GLclampf ref );
typedef void (APIENTRY *PFNGLBLENDFUNC)( GLenum sfactor, GLenum dfactor );
typedef void (APIENTRY *PFNGLLOGICOP)( GLenum opcode );
typedef void (APIENTRY *PFNGLCULLFACE)( GLenum mode );
typedef void (APIENTRY *PFNGLFRONTFACE)( GLenum mode );
typedef void (APIENTRY *PFNGLPOINTSIZE)( GLfloat size );
typedef void (APIENTRY *PFNGLLINEWIDTH)( GLfloat width );
typedef void (APIENTRY *PFNGLLINESTIPPLE)( GLint factor, GLushort pattern );
typedef void (APIENTRY *PFNGLPOLYGONMODE)( GLenum face, GLenum mode );
typedef void (APIENTRY *PFNGLPOLYGONOFFSET)( GLfloat factor, GLfloat units );
typedef void (APIENTRY *PFNGLPOLYGONSTIPPLE)( const GLubyte *mask );
typedef void (APIENTRY *PFNGLGETPOLYGONSTIPPLE)( GLubyte *mask );
typedef void (APIENTRY *PFNGLEDGEFLAG)( GLboolean flag );
typedef void (APIENTRY *PFNGLEDGEFLAGV)( const GLboolean *flag );
typedef void (APIENTRY *PFNGLSCISSOR)( GLint x, GLint y, GLsizei width, GLsizei height);
typedef void (APIENTRY *PFNGLCLIPPLANE)( GLenum plane, const GLdouble *equation );
typedef void (APIENTRY *PFNGLGETCLIPPLANE)( GLenum plane, GLdouble *equation );
typedef void (APIENTRY *PFNGLDRAWBUFFER)( GLenum mode );
typedef void (APIENTRY *PFNGLREADBUFFER)( GLenum mode );
typedef void (APIENTRY *PFNGLENABLE)( GLenum cap );
typedef void (APIENTRY *PFNGLDISABLE)( GLenum cap );
typedef GLboolean (APIENTRY *PFNGLISENABLED)( GLenum cap );
typedef void (APIENTRY *PFNGLENABLECLIENTSTATE)( GLenum cap );  /* 1.1 */
typedef void (APIENTRY *PFNGLDISABLECLIENTSTATE)( GLenum cap );  /* 1.1 */
typedef void (APIENTRY *PFNGLGETBOOLEANV)( GLenum pname, GLboolean *params );
typedef void (APIENTRY *PFNGLGETDOUBLEV)( GLenum pname, GLdouble *params );
typedef void (APIENTRY *PFNGLGETFLOATV)( GLenum pname, GLfloat *params );
typedef void (APIENTRY *PFNGLGETINTEGERV)( GLenum pname, GLint *params );
typedef void (APIENTRY *PFNGLPUSHATTRIB)( GLbitfield mask );
typedef void (APIENTRY *PFNGLPOPATTRIB)( void );
typedef void (APIENTRY *PFNGLPUSHCLIENTATTRIB)( GLbitfield mask );  /* 1.1 */
typedef void (APIENTRY *PFNGLPOPCLIENTATTRIB)( void );  /* 1.1 */
typedef GLint (APIENTRY *PFNGLRENDERMODE)( GLenum mode );
typedef GLenum (APIENTRY *PFNGLGETERROR)( void );
typedef const GLubyte* (APIENTRY *PFNGLGETSTRING)( GLenum name );
typedef void (APIENTRY *PFNGLFINISH)( void );
typedef void (APIENTRY *PFNGLFLUSH)( void );
typedef void (APIENTRY *PFNGLHINT)( GLenum target, GLenum mode );
typedef void (APIENTRY *PFNGLCLEARDEPTH)( GLclampd depth );
typedef void (APIENTRY *PFNGLDEPTHFUNC)( GLenum func );
typedef void (APIENTRY *PFNGLDEPTHMASK)( GLboolean flag );
typedef void (APIENTRY *PFNGLDEPTHRANGE)( GLclampd near_val, GLclampd far_val );
typedef void (APIENTRY *PFNGLCLEARACCUM)( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
typedef void (APIENTRY *PFNGLACCUM)( GLenum op, GLfloat value );
typedef void (APIENTRY *PFNGLMATRIXMODE)( GLenum mode );
typedef void (APIENTRY *PFNGLORTHO)( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
typedef void (APIENTRY *PFNGLFRUSTUM)( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near_val, GLdouble far_val );
typedef void (APIENTRY *PFNGLVIEWPORT)( GLint x, GLint y, GLsizei width, GLsizei height );
typedef void (APIENTRY *PFNGLPUSHMATRIX)( void );
typedef void (APIENTRY *PFNGLPOPMATRIX)( void );
typedef void (APIENTRY *PFNGLLOADIDENTITY)( void );
typedef void (APIENTRY *PFNGLLOADMATRIXD)( const GLdouble *m );
typedef void (APIENTRY *PFNGLLOADMATRIXF)( const GLfloat *m );
typedef void (APIENTRY *PFNGLMULTMATRIXD)( const GLdouble *m );
typedef void (APIENTRY *PFNGLMULTMATRIXF)( const GLfloat *m );
typedef void (APIENTRY *PFNGLROTATED)( GLdouble angle, GLdouble x, GLdouble y, GLdouble z );
typedef void (APIENTRY *PFNGLROTATEF)( GLfloat angle, GLfloat x, GLfloat y, GLfloat z );
typedef void (APIENTRY *PFNGLSCALED)( GLdouble x, GLdouble y, GLdouble z );
typedef void (APIENTRY *PFNGLSCALEF)( GLfloat x, GLfloat y, GLfloat z );
typedef void (APIENTRY *PFNGLTRANSLATED)( GLdouble x, GLdouble y, GLdouble z );
typedef void (APIENTRY *PFNGLTRANSLATEF)( GLfloat x, GLfloat y, GLfloat z );
typedef GLboolean (APIENTRY *PFNGLISLIST)( GLuint list );
typedef void (APIENTRY *PFNGLDELETELISTS)( GLuint list, GLsizei range );
typedef GLuint (APIENTRY *PFNGLGENLISTS)( GLsizei range );
typedef void (APIENTRY *PFNGLNEWLIST)( GLuint list, GLenum mode );
typedef void (APIENTRY *PFNGLENDLIST)( void );
typedef void (APIENTRY *PFNGLCALLLIST)( GLuint list );
typedef void (APIENTRY *PFNGLCALLLISTS)( GLsizei n, GLenum type, const GLvoid *lists );
typedef void (APIENTRY *PFNGLLISTBASE)( GLuint base );
typedef void (APIENTRY *PFNGLBEGIN)( GLenum mode );
typedef void (APIENTRY *PFNGLEND)( void );
typedef void (APIENTRY *PFNGLVERTEX2D)( GLdouble x, GLdouble y );
typedef void (APIENTRY *PFNGLVERTEX2F)( GLfloat x, GLfloat y );
typedef void (APIENTRY *PFNGLVERTEX2I)( GLint x, GLint y );
typedef void (APIENTRY *PFNGLVERTEX2S)( GLshort x, GLshort y );
typedef void (APIENTRY *PFNGLVERTEX3D)( GLdouble x, GLdouble y, GLdouble z );
typedef void (APIENTRY *PFNGLVERTEX3F)( GLfloat x, GLfloat y, GLfloat z );
typedef void (APIENTRY *PFNGLVERTEX3I)( GLint x, GLint y, GLint z );
typedef void (APIENTRY *PFNGLVERTEX3S)( GLshort x, GLshort y, GLshort z );
typedef void (APIENTRY *PFNGLVERTEX4D)( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
typedef void (APIENTRY *PFNGLVERTEX4F)( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
typedef void (APIENTRY *PFNGLVERTEX4I)( GLint x, GLint y, GLint z, GLint w );
typedef void (APIENTRY *PFNGLVERTEX4S)( GLshort x, GLshort y, GLshort z, GLshort w );
typedef void (APIENTRY *PFNGLVERTEX2DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLVERTEX2FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLVERTEX2IV)( const GLint *v );
typedef void (APIENTRY *PFNGLVERTEX2SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLVERTEX3DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLVERTEX3FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLVERTEX3IV)( const GLint *v );
typedef void (APIENTRY *PFNGLVERTEX3SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLVERTEX4DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLVERTEX4FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLVERTEX4IV)( const GLint *v );
typedef void (APIENTRY *PFNGLVERTEX4SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLNORMAL3B)( GLbyte nx, GLbyte ny, GLbyte nz );
typedef void (APIENTRY *PFNGLNORMAL3D)( GLdouble nx, GLdouble ny, GLdouble nz );
typedef void (APIENTRY *PFNGLNORMAL3F)( GLfloat nx, GLfloat ny, GLfloat nz );
typedef void (APIENTRY *PFNGLNORMAL3I)( GLint nx, GLint ny, GLint nz );
typedef void (APIENTRY *PFNGLNORMAL3S)( GLshort nx, GLshort ny, GLshort nz );
typedef void (APIENTRY *PFNGLNORMAL3BV)( const GLbyte *v );
typedef void (APIENTRY *PFNGLNORMAL3DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLNORMAL3FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLNORMAL3IV)( const GLint *v );
typedef void (APIENTRY *PFNGLNORMAL3SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLINDEXD)( GLdouble c );
typedef void (APIENTRY *PFNGLINDEXF)( GLfloat c );
typedef void (APIENTRY *PFNGLINDEXI)( GLint c );
typedef void (APIENTRY *PFNGLINDEXS)( GLshort c );
typedef void (APIENTRY *PFNGLINDEXUB)( GLubyte c );  /* 1.1 */
typedef void (APIENTRY *PFNGLINDEXDV)( const GLdouble *c );
typedef void (APIENTRY *PFNGLINDEXFV)( const GLfloat *c );
typedef void (APIENTRY *PFNGLINDEXIV)( const GLint *c );
typedef void (APIENTRY *PFNGLINDEXSV)( const GLshort *c );
typedef void (APIENTRY *PFNGLINDEXUBV)( const GLubyte *c );  /* 1.1 */
typedef void (APIENTRY *PFNGLCOLOR3B)( GLbyte red, GLbyte green, GLbyte blue );
typedef void (APIENTRY *PFNGLCOLOR3D)( GLdouble red, GLdouble green, GLdouble blue );
typedef void (APIENTRY *PFNGLCOLOR3F)( GLfloat red, GLfloat green, GLfloat blue );
typedef void (APIENTRY *PFNGLCOLOR3I)( GLint red, GLint green, GLint blue );
typedef void (APIENTRY *PFNGLCOLOR3S)( GLshort red, GLshort green, GLshort blue );
typedef void (APIENTRY *PFNGLCOLOR3UB)( GLubyte red, GLubyte green, GLubyte blue );
typedef void (APIENTRY *PFNGLCOLOR3UI)( GLuint red, GLuint green, GLuint blue );
typedef void (APIENTRY *PFNGLCOLOR3US)( GLushort red, GLushort green, GLushort blue );
typedef void (APIENTRY *PFNGLCOLOR4B)( GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha );
typedef void (APIENTRY *PFNGLCOLOR4D)( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha );
typedef void (APIENTRY *PFNGLCOLOR4F)( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha );
typedef void (APIENTRY *PFNGLCOLOR4I)( GLint red, GLint green, GLint blue, GLint alpha );
typedef void (APIENTRY *PFNGLCOLOR4S)( GLshort red, GLshort green, GLshort blue, GLshort alpha );
typedef void (APIENTRY *PFNGLCOLOR4UB)( GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha );
typedef void (APIENTRY *PFNGLCOLOR4UI)( GLuint red, GLuint green, GLuint blue, GLuint alpha );
typedef void (APIENTRY *PFNGLCOLOR4US)( GLushort red, GLushort green, GLushort blue, GLushort alpha );
typedef void (APIENTRY *PFNGLCOLOR3BV)( const GLbyte *v );
typedef void (APIENTRY *PFNGLCOLOR3DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLCOLOR3FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLCOLOR3IV)( const GLint *v );
typedef void (APIENTRY *PFNGLCOLOR3SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLCOLOR3UBV)( const GLubyte *v );
typedef void (APIENTRY *PFNGLCOLOR3UIV)( const GLuint *v );
typedef void (APIENTRY *PFNGLCOLOR3USV)( const GLushort *v );
typedef void (APIENTRY *PFNGLCOLOR4BV)( const GLbyte *v );
typedef void (APIENTRY *PFNGLCOLOR4DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLCOLOR4FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLCOLOR4IV)( const GLint *v );
typedef void (APIENTRY *PFNGLCOLOR4SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLCOLOR4UBV)( const GLubyte *v );
typedef void (APIENTRY *PFNGLCOLOR4UIV)( const GLuint *v );
typedef void (APIENTRY *PFNGLCOLOR4USV)( const GLushort *v );
typedef void (APIENTRY *PFNGLTEXCOORD1D)( GLdouble s );
typedef void (APIENTRY *PFNGLTEXCOORD1F)( GLfloat s );
typedef void (APIENTRY *PFNGLTEXCOORD1I)( GLint s );
typedef void (APIENTRY *PFNGLTEXCOORD1S)( GLshort s );
typedef void (APIENTRY *PFNGLTEXCOORD2D)( GLdouble s, GLdouble t );
typedef void (APIENTRY *PFNGLTEXCOORD2F)( GLfloat s, GLfloat t );
typedef void (APIENTRY *PFNGLTEXCOORD2I)( GLint s, GLint t );
typedef void (APIENTRY *PFNGLTEXCOORD2S)( GLshort s, GLshort t );
typedef void (APIENTRY *PFNGLTEXCOORD3D)( GLdouble s, GLdouble t, GLdouble r );
typedef void (APIENTRY *PFNGLTEXCOORD3F)( GLfloat s, GLfloat t, GLfloat r );
typedef void (APIENTRY *PFNGLTEXCOORD3I)( GLint s, GLint t, GLint r );
typedef void (APIENTRY *PFNGLTEXCOORD3S)( GLshort s, GLshort t, GLshort r );
typedef void (APIENTRY *PFNGLTEXCOORD4D)( GLdouble s, GLdouble t, GLdouble r, GLdouble q );
typedef void (APIENTRY *PFNGLTEXCOORD4F)( GLfloat s, GLfloat t, GLfloat r, GLfloat q );
typedef void (APIENTRY *PFNGLTEXCOORD4I)( GLint s, GLint t, GLint r, GLint q );
typedef void (APIENTRY *PFNGLTEXCOORD4S)( GLshort s, GLshort t, GLshort r, GLshort q );
typedef void (APIENTRY *PFNGLTEXCOORD1DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLTEXCOORD1FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLTEXCOORD1IV)( const GLint *v );
typedef void (APIENTRY *PFNGLTEXCOORD1SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLTEXCOORD2DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLTEXCOORD2FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLTEXCOORD2IV)( const GLint *v );
typedef void (APIENTRY *PFNGLTEXCOORD2SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLTEXCOORD3DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLTEXCOORD3FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLTEXCOORD3IV)( const GLint *v );
typedef void (APIENTRY *PFNGLTEXCOORD3SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLTEXCOORD4DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLTEXCOORD4FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLTEXCOORD4IV)( const GLint *v );
typedef void (APIENTRY *PFNGLTEXCOORD4SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLRASTERPOS2D)( GLdouble x, GLdouble y );
typedef void (APIENTRY *PFNGLRASTERPOS2F)( GLfloat x, GLfloat y );
typedef void (APIENTRY *PFNGLRASTERPOS2I)( GLint x, GLint y );
typedef void (APIENTRY *PFNGLRASTERPOS2S)( GLshort x, GLshort y );
typedef void (APIENTRY *PFNGLRASTERPOS3D)( GLdouble x, GLdouble y, GLdouble z );
typedef void (APIENTRY *PFNGLRASTERPOS3F)( GLfloat x, GLfloat y, GLfloat z );
typedef void (APIENTRY *PFNGLRASTERPOS3I)( GLint x, GLint y, GLint z );
typedef void (APIENTRY *PFNGLRASTERPOS3S)( GLshort x, GLshort y, GLshort z );
typedef void (APIENTRY *PFNGLRASTERPOS4D)( GLdouble x, GLdouble y, GLdouble z, GLdouble w );
typedef void (APIENTRY *PFNGLRASTERPOS4F)( GLfloat x, GLfloat y, GLfloat z, GLfloat w );
typedef void (APIENTRY *PFNGLRASTERPOS4I)( GLint x, GLint y, GLint z, GLint w );
typedef void (APIENTRY *PFNGLRASTERPOS4S)( GLshort x, GLshort y, GLshort z, GLshort w );
typedef void (APIENTRY *PFNGLRASTERPOS2DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLRASTERPOS2FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLRASTERPOS2IV)( const GLint *v );
typedef void (APIENTRY *PFNGLRASTERPOS2SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLRASTERPOS3DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLRASTERPOS3FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLRASTERPOS3IV)( const GLint *v );
typedef void (APIENTRY *PFNGLRASTERPOS3SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLRASTERPOS4DV)( const GLdouble *v );
typedef void (APIENTRY *PFNGLRASTERPOS4FV)( const GLfloat *v );
typedef void (APIENTRY *PFNGLRASTERPOS4IV)( const GLint *v );
typedef void (APIENTRY *PFNGLRASTERPOS4SV)( const GLshort *v );
typedef void (APIENTRY *PFNGLRECTD)( GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2 );
typedef void (APIENTRY *PFNGLRECTF)( GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2 );
typedef void (APIENTRY *PFNGLRECTI)( GLint x1, GLint y1, GLint x2, GLint y2 );
typedef void (APIENTRY *PFNGLRECTS)( GLshort x1, GLshort y1, GLshort x2, GLshort y2 );
typedef void (APIENTRY *PFNGLRECTDV)( const GLdouble *v1, const GLdouble *v2 );
typedef void (APIENTRY *PFNGLRECTFV)( const GLfloat *v1, const GLfloat *v2 );
typedef void (APIENTRY *PFNGLRECTIV)( const GLint *v1, const GLint *v2 );
typedef void (APIENTRY *PFNGLRECTSV)( const GLshort *v1, const GLshort *v2 );
typedef void (APIENTRY *PFNGLSHADEMODEL)( GLenum mode );
typedef void (APIENTRY *PFNGLLIGHTF)( GLenum light, GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLLIGHTI)( GLenum light, GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLLIGHTFV)( GLenum light, GLenum pname, const GLfloat *params );
typedef void (APIENTRY *PFNGLLIGHTIV)( GLenum light, GLenum pname, const GLint *params );
typedef void (APIENTRY *PFNGLGETLIGHTFV)( GLenum light, GLenum pname, GLfloat *params );
typedef void (APIENTRY *PFNGLGETLIGHTIV)( GLenum light, GLenum pname, GLint *params );
typedef void (APIENTRY *PFNGLLIGHTMODELF)( GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLLIGHTMODELI)( GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLLIGHTMODELFV)( GLenum pname, const GLfloat *params );
typedef void (APIENTRY *PFNGLLIGHTMODELIV)( GLenum pname, const GLint *params );
typedef void (APIENTRY *PFNGLMATERIALF)( GLenum face, GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLMATERIALI)( GLenum face, GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLMATERIALFV)( GLenum face, GLenum pname, const GLfloat *params );
typedef void (APIENTRY *PFNGLMATERIALIV)( GLenum face, GLenum pname, const GLint *params );
typedef void (APIENTRY *PFNGLGETMATERIALFV)( GLenum face, GLenum pname, GLfloat *params );
typedef void (APIENTRY *PFNGLGETMATERIALIV)( GLenum face, GLenum pname, GLint *params );
typedef void (APIENTRY *PFNGLCOLORMATERIAL)( GLenum face, GLenum mode );
typedef void (APIENTRY *PFNGLPIXELZOOM)( GLfloat xfactor, GLfloat yfactor );
typedef void (APIENTRY *PFNGLPIXELSTOREF)( GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLPIXELSTOREI)( GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLPIXELTRANSFERF)( GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLPIXELTRANSFERI)( GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLPIXELMAPFV)( GLenum map, GLint mapsize, const GLfloat *values );
typedef void (APIENTRY *PFNGLPIXELMAPUIV)( GLenum map, GLint mapsize, const GLuint *values );
typedef void (APIENTRY *PFNGLPIXELMAPUSV)( GLenum map, GLint mapsize, const GLushort *values );
typedef void (APIENTRY *PFNGLGETPIXELMAPFV)( GLenum map, GLfloat *values );
typedef void (APIENTRY *PFNGLGETPIXELMAPUIV)( GLenum map, GLuint *values );
typedef void (APIENTRY *PFNGLGETPIXELMAPUSV)( GLenum map, GLushort *values );
typedef void (APIENTRY *PFNGLBITMAP)( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap );
typedef void (APIENTRY *PFNGLREADPIXELS)( GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels );
typedef void (APIENTRY *PFNGLDRAWPIXELS)( GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (APIENTRY *PFNGLCOPYPIXELS)( GLint x, GLint y, GLsizei width, GLsizei height, GLenum type );
typedef void (APIENTRY *PFNGLSTENCILFUNC)( GLenum func, GLint ref, GLuint mask );
typedef void (APIENTRY *PFNGLSTENCILMASK)( GLuint mask );
typedef void (APIENTRY *PFNGLSTENCILOP)( GLenum fail, GLenum zfail, GLenum zpass );
typedef void (APIENTRY *PFNGLCLEARSTENCIL)( GLint s );
typedef void (APIENTRY *PFNGLTEXGEND)( GLenum coord, GLenum pname, GLdouble param );
typedef void (APIENTRY *PFNGLTEXGENF)( GLenum coord, GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLTEXGENI)( GLenum coord, GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLTEXGENDV)( GLenum coord, GLenum pname, const GLdouble *params );
typedef void (APIENTRY *PFNGLTEXGENFV)( GLenum coord, GLenum pname, const GLfloat *params );
typedef void (APIENTRY *PFNGLTEXGENIV)( GLenum coord, GLenum pname, const GLint *params );
typedef void (APIENTRY *PFNGLGETTEXGENDV)( GLenum coord, GLenum pname, GLdouble *params );
typedef void (APIENTRY *PFNGLGETTEXGENFV)( GLenum coord, GLenum pname, GLfloat *params );
typedef void (APIENTRY *PFNGLGETTEXGENIV)( GLenum coord, GLenum pname, GLint *params );
typedef void (APIENTRY *PFNGLTEXENVF)( GLenum target, GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLTEXENVI)( GLenum target, GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLTEXENVFV)( GLenum target, GLenum pname, const GLfloat *params );
typedef void (APIENTRY *PFNGLTEXENVIV)( GLenum target, GLenum pname, const GLint *params );
typedef void (APIENTRY *PFNGLGETTEXENVFV)( GLenum target, GLenum pname, GLfloat *params );
typedef void (APIENTRY *PFNGLGETTEXENVIV)( GLenum target, GLenum pname, GLint *params );
typedef void (APIENTRY *PFNGLTEXPARAMETERF)( GLenum target, GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLTEXPARAMETERI)( GLenum target, GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLTEXPARAMETERFV)( GLenum target, GLenum pname, const GLfloat *params );
typedef void (APIENTRY *PFNGLTEXPARAMETERIV)( GLenum target, GLenum pname, const GLint *params );
typedef void (APIENTRY *PFNGLGETTEXPARAMETERFV)( GLenum target, GLenum pname, GLfloat *params);
typedef void (APIENTRY *PFNGLGETTEXPARAMETERIV)( GLenum target, GLenum pname, GLint *params );
typedef void (APIENTRY *PFNGLGETTEXLEVELPARAMETERFV)( GLenum target, GLint level, GLenum pname, GLfloat *params );
typedef void (APIENTRY *PFNGLGETTEXLEVELPARAMETERIV)( GLenum target, GLint level, GLenum pname, GLint *params );
typedef void (APIENTRY *PFNGLTEXIMAGE1D)( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (APIENTRY *PFNGLTEXIMAGE2D)( GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (APIENTRY *PFNGLGETTEXIMAGE)( GLenum target, GLint level, GLenum format, GLenum type, GLvoid *pixels );
typedef void (APIENTRY *PFNGLMAP1D)( GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points );
typedef void (APIENTRY *PFNGLMAP1F)( GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points );
typedef void (APIENTRY *PFNGLMAP2D)( GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points );
typedef void (APIENTRY *PFNGLMAP2F)( GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points );
typedef void (APIENTRY *PFNGLGETMAPDV)( GLenum target, GLenum query, GLdouble *v );
typedef void (APIENTRY *PFNGLGETMAPFV)( GLenum target, GLenum query, GLfloat *v );
typedef void (APIENTRY *PFNGLGETMAPIV)( GLenum target, GLenum query, GLint *v );
typedef void (APIENTRY *PFNGLEVALCOORD1D)( GLdouble u );
typedef void (APIENTRY *PFNGLEVALCOORD1F)( GLfloat u );
typedef void (APIENTRY *PFNGLEVALCOORD1DV)( const GLdouble *u );
typedef void (APIENTRY *PFNGLEVALCOORD1FV)( const GLfloat *u );
typedef void (APIENTRY *PFNGLEVALCOORD2D)( GLdouble u, GLdouble v );
typedef void (APIENTRY *PFNGLEVALCOORD2F)( GLfloat u, GLfloat v );
typedef void (APIENTRY *PFNGLEVALCOORD2DV)( const GLdouble *u );
typedef void (APIENTRY *PFNGLEVALCOORD2FV)( const GLfloat *u );
typedef void (APIENTRY *PFNGLMAPGRID1D)( GLint un, GLdouble u1, GLdouble u2 );
typedef void (APIENTRY *PFNGLMAPGRID1F)( GLint un, GLfloat u1, GLfloat u2 );
typedef void (APIENTRY *PFNGLMAPGRID2D)( GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2 );
typedef void (APIENTRY *PFNGLMAPGRID2F)( GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2 );
typedef void (APIENTRY *PFNGLEVALPOINT1)( GLint i );
typedef void (APIENTRY *PFNGLEVALPOINT2)( GLint i, GLint j );
typedef void (APIENTRY *PFNGLEVALMESH1)( GLenum mode, GLint i1, GLint i2 );
typedef void (APIENTRY *PFNGLEVALMESH2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 );
typedef void (APIENTRY *PFNGLFOGF)( GLenum pname, GLfloat param );
typedef void (APIENTRY *PFNGLFOGI)( GLenum pname, GLint param );
typedef void (APIENTRY *PFNGLFOGFV)( GLenum pname, const GLfloat *params );
typedef void (APIENTRY *PFNGLFOGIV)( GLenum pname, const GLint *params );
typedef void (APIENTRY *PFNGLFEEDBACKBUFFER)( GLsizei size, GLenum type, GLfloat *buffer );
typedef void (APIENTRY *PFNGLPASSTHROUGH)( GLfloat token );
typedef void (APIENTRY *PFNGLSELECTBUFFER)( GLsizei size, GLuint *buffer );
typedef void (APIENTRY *PFNGLINITNAMES)( void );
typedef void (APIENTRY *PFNGLLOADNAME)( GLuint name );
typedef void (APIENTRY *PFNGLPUSHNAME)( GLuint name );
typedef void (APIENTRY *PFNGLPOPNAME)( void );
typedef void (APIENTRY *PFNGLGENTEXTURES)( GLsizei n, GLuint *textures );
typedef void (APIENTRY *PFNGLDELETETEXTURES)( GLsizei n, const GLuint *textures);
typedef void (APIENTRY *PFNGLBINDTEXTURE)( GLenum target, GLuint texture );
typedef void (APIENTRY *PFNGLPRIORITIZETEXTURES)( GLsizei n, const GLuint *textures, const GLclampf *priorities );
typedef GLboolean (APIENTRY *PFNGLARETEXTURESRESIDENT)( GLsizei n, const GLuint *textures, GLboolean *residences );
typedef GLboolean (APIENTRY *PFNGLISTEXTURE)( GLuint texture );
typedef void (APIENTRY *PFNGLTEXSUBIMAGE1D)( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (APIENTRY *PFNGLTEXSUBIMAGE2D)( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels );
typedef void (APIENTRY *PFNGLCOPYTEXIMAGE1D)( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border );
typedef void (APIENTRY *PFNGLCOPYTEXIMAGE2D)( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border );
typedef void (APIENTRY *PFNGLCOPYTEXSUBIMAGE1D)( GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width );
typedef void (APIENTRY *PFNGLCOPYTEXSUBIMAGE2D)( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height );
typedef void (APIENTRY *PFNGLVERTEXPOINTER)( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (APIENTRY *PFNGLNORMALPOINTER)( GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (APIENTRY *PFNGLCOLORPOINTER)( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (APIENTRY *PFNGLINDEXPOINTER)( GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (APIENTRY *PFNGLTEXCOORDPOINTER)( GLint size, GLenum type, GLsizei stride, const GLvoid *ptr );
typedef void (APIENTRY *PFNGLEDGEFLAGPOINTER)( GLsizei stride, const GLvoid *ptr );
typedef void (APIENTRY *PFNGLGETPOINTERV)( GLenum pname, GLvoid **params );
typedef void (APIENTRY *PFNGLARRAYELEMENT)( GLint i );
typedef void (APIENTRY *PFNGLDRAWARRAYS)( GLenum mode, GLint first, GLsizei count );
typedef void (APIENTRY *PFNGLDRAWELEMENTS)( GLenum mode, GLsizei count, GLenum type, const GLvoid *indices );
typedef void (APIENTRY *PFNGLINTERLEAVEDARRAYS)( GLenum format, GLsizei stride, const GLvoid *pointer );

namespace nane
{
    enum EOGLAPIVersion
    {
        GLAPI_UNKNOWN = 0,
        GLAPI_1_0_ES,
        GLAPI_1_0,
        GLAPI_1_1_ES,
        GLAPI_1_1,
        GLAPI_1_2,
        GLAPI_ES_1_0,
        GLAPI_1_3,
        GLAPI_1_4_ES,
        GLAPI_1_4,
        GLAPI_ES_1_1,
        GLAPI_1_5,
        GLAPI_2_0,
        GLAPI_2_1
    };

    struct OGLAPI
    {
        static EOGLAPIVersion               version;
        static ModuleHandle*                hModule;
        static PFNGLCLEARINDEX              glClearIndex;
        static PFNGLCLEARCOLOR              glClearColor;
        static PFNGLCLEAR                   glClear;
        static PFNGLINDEXMASK               glIndexMask;
        static PFNGLCOLORMASK               glColorMask;
        static PFNGLALPHAFUNC               glAlphaFunc;
        static PFNGLBLENDFUNC               glBlendFunc;
        static PFNGLLOGICOP                 glLogicOp;
        static PFNGLCULLFACE                glCullFace;
        static PFNGLFRONTFACE               glFrontFace;
        static PFNGLPOINTSIZE               glPointSize;
        static PFNGLLINEWIDTH               glLineWidth;
        static PFNGLLINESTIPPLE             glLineStipple;
        static PFNGLPOLYGONMODE             glPolygonMode;
        static PFNGLPOLYGONOFFSET           glPolygonOffset;
        static PFNGLPOLYGONSTIPPLE          glPolygonStipple;
        static PFNGLGETPOLYGONSTIPPLE       glGetPolygonStipple;
        static PFNGLEDGEFLAG                glEdgeFlag;
        static PFNGLEDGEFLAGV               glEdgeFlagv;
        static PFNGLSCISSOR                 glScissor;
        static PFNGLCLIPPLANE               glClipPlane;
        static PFNGLGETCLIPPLANE            glGetClipPlane;
        static PFNGLDRAWBUFFER              glDrawBuffer;
        static PFNGLREADBUFFER              glReadBuffer;
        static PFNGLENABLE                  glEnable;
        static PFNGLDISABLE                 glDisable;
        static PFNGLISENABLED               glIsEnabled;
        static PFNGLENABLECLIENTSTATE       glEnableClientState;  // 1.1
        static PFNGLDISABLECLIENTSTATE      glDisableClientState;  // 1.1
        static PFNGLGETBOOLEANV             glGetBooleanv;
        static PFNGLGETDOUBLEV              glGetDoublev;
        static PFNGLGETFLOATV               glGetFloatv;
        static PFNGLGETINTEGERV             glGetIntegerv;
        static PFNGLPUSHATTRIB              glPushAttrib;
        static PFNGLPOPATTRIB               glPopAttrib;
        static PFNGLPUSHCLIENTATTRIB        glPushClientAttrib;  // 1.1
        static PFNGLPOPCLIENTATTRIB         glPopClientAttrib;  // 1.1
        static PFNGLRENDERMODE              glRenderMode;
        static PFNGLGETERROR                glGetError;
        static PFNGLGETSTRING               glGetString;
        static PFNGLFINISH                  glFinish;
        static PFNGLFLUSH                   glFlush;
        static PFNGLHINT                    glHint;

        // Depth Buffer
        static PFNGLCLEARDEPTH              glClearDepth;
        static PFNGLDEPTHFUNC               glDepthFunc;
        static PFNGLDEPTHMASK               glDepthMask;
        static PFNGLDEPTHRANGE              glDepthRange;

        // Accumulation Buffer
        static PFNGLCLEARACCUM              glClearAccum;
        static PFNGLACCUM                   glAccum;

        // Transformation
        static PFNGLMATRIXMODE              glMatrixMode;
        static PFNGLORTHO                   glOrtho;
        static PFNGLFRUSTUM                 glFrustum;
        static PFNGLVIEWPORT                glViewport;
        static PFNGLPUSHMATRIX              glPushMatrix;
        static PFNGLPOPMATRIX               glPopMatrix;
        static PFNGLLOADIDENTITY            glLoadIdentity;
        static PFNGLLOADMATRIXD             glLoadMatrixd;
        static PFNGLLOADMATRIXF             glLoadMatrixf;
        static PFNGLMULTMATRIXD             glMultMatrixd;
        static PFNGLMULTMATRIXF             glMultMatrixf;
        static PFNGLROTATED                 glRotated;
        static PFNGLROTATEF                 glRotatef;
        static PFNGLSCALED                  glScaled;
        static PFNGLSCALEF                  glScalef;
        static PFNGLTRANSLATED              glTranslated;
        static PFNGLTRANSLATEF              glTranslatef;

        // Display Lists
        static PFNGLISLIST                  glIsList;
        static PFNGLDELETELISTS             glDeleteLists;
        static PFNGLGENLISTS                glGenLists;
        static PFNGLNEWLIST                 glNewList;
        static PFNGLENDLIST                 glEndList;
        static PFNGLCALLLIST                glCallList;
        static PFNGLCALLLISTS               glCallLists;
        static PFNGLLISTBASE                glListBase;

        // Drawing Functions
        static PFNGLBEGIN                   glBegin;
        static PFNGLEND                     glEnd;
        static PFNGLVERTEX2D                glVertex2d;
        static PFNGLVERTEX2F                glVertex2f;
        static PFNGLVERTEX2I                glVertex2i;
        static PFNGLVERTEX2S                glVertex2s;
        static PFNGLVERTEX3D                glVertex3d;
        static PFNGLVERTEX3F                glVertex3f;
        static PFNGLVERTEX3I                glVertex3i;
        static PFNGLVERTEX3S                glVertex3s;
        static PFNGLVERTEX4D                glVertex4d;
        static PFNGLVERTEX4F                glVertex4f;
        static PFNGLVERTEX4I                glVertex4i;
        static PFNGLVERTEX4S                glVertex4s;
        static PFNGLVERTEX2DV               glVertex2dv;
        static PFNGLVERTEX2FV               glVertex2fv;
        static PFNGLVERTEX2IV               glVertex2iv;
        static PFNGLVERTEX2SV               glVertex2sv;
        static PFNGLVERTEX3DV               glVertex3dv;
        static PFNGLVERTEX3FV               glVertex3fv;
        static PFNGLVERTEX3IV               glVertex3iv;
        static PFNGLVERTEX3SV               glVertex3sv;
        static PFNGLVERTEX4DV               glVertex4dv;
        static PFNGLVERTEX4FV               glVertex4fv;
        static PFNGLVERTEX4IV               glVertex4iv;
        static PFNGLVERTEX4SV               glVertex4sv;
        static PFNGLNORMAL3B                glNormal3b;
        static PFNGLNORMAL3D                glNormal3d;
        static PFNGLNORMAL3F                glNormal3f;
        static PFNGLNORMAL3I                glNormal3i;
        static PFNGLNORMAL3S                glNormal3s;
        static PFNGLNORMAL3BV               glNormal3bv;
        static PFNGLNORMAL3DV               glNormal3dv;
        static PFNGLNORMAL3FV               glNormal3fv;
        static PFNGLNORMAL3IV               glNormal3iv;
        static PFNGLNORMAL3SV               glNormal3sv;
        static PFNGLINDEXD                  glIndexd;
        static PFNGLINDEXF                  glIndexf;
        static PFNGLINDEXI                  glIndexi;
        static PFNGLINDEXS                  glIndexs;
        static PFNGLINDEXUB                 glIndexub;  // 1.1
        static PFNGLINDEXDV                 glIndexdv;
        static PFNGLINDEXFV                 glIndexfv;
        static PFNGLINDEXIV                 glIndexiv;
        static PFNGLINDEXSV                 glIndexsv;
        static PFNGLINDEXUBV                glIndexubv;  // 1.1
        static PFNGLCOLOR3B                 glColor3b;
        static PFNGLCOLOR3D                 glColor3d;
        static PFNGLCOLOR3F                 glColor3f;
        static PFNGLCOLOR3I                 glColor3i;
        static PFNGLCOLOR3S                 glColor3s;
        static PFNGLCOLOR3UB                glColor3ub;
        static PFNGLCOLOR3UI                glColor3ui;
        static PFNGLCOLOR3US                glColor3us;
        static PFNGLCOLOR4B                 glColor4b;
        static PFNGLCOLOR4D                 glColor4d;
        static PFNGLCOLOR4F                 glColor4f;
        static PFNGLCOLOR4I                 glColor4i;
        static PFNGLCOLOR4S                 glColor4s;
        static PFNGLCOLOR4UB                glColor4ub;
        static PFNGLCOLOR4UI                glColor4ui;
        static PFNGLCOLOR4US                glColor4us;
        static PFNGLCOLOR3BV                glColor3bv;
        static PFNGLCOLOR3DV                glColor3dv;
        static PFNGLCOLOR3FV                glColor3fv;
        static PFNGLCOLOR3IV                glColor3iv;
        static PFNGLCOLOR3SV                glColor3sv;
        static PFNGLCOLOR3UBV               glColor3ubv;
        static PFNGLCOLOR3UIV               glColor3uiv;
        static PFNGLCOLOR3USV               glColor3usv;
        static PFNGLCOLOR4BV                glColor4bv;
        static PFNGLCOLOR4DV                glColor4dv;
        static PFNGLCOLOR4FV                glColor4fv;
        static PFNGLCOLOR4IV                glColor4iv;
        static PFNGLCOLOR4SV                glColor4sv;
        static PFNGLCOLOR4UBV               glColor4ubv;
        static PFNGLCOLOR4UIV               glColor4uiv;
        static PFNGLCOLOR4USV               glColor4usv;
        static PFNGLTEXCOORD1D              glTexCoord1d;
        static PFNGLTEXCOORD1F              glTexCoord1f;
        static PFNGLTEXCOORD1I              glTexCoord1i;
        static PFNGLTEXCOORD1S              glTexCoord1s;
        static PFNGLTEXCOORD2D              glTexCoord2d;
        static PFNGLTEXCOORD2F              glTexCoord2f;
        static PFNGLTEXCOORD2I              glTexCoord2i;
        static PFNGLTEXCOORD2S              glTexCoord2s;
        static PFNGLTEXCOORD3D              glTexCoord3d;
        static PFNGLTEXCOORD3F              glTexCoord3f;
        static PFNGLTEXCOORD3I              glTexCoord3i;
        static PFNGLTEXCOORD3S              glTexCoord3s;
        static PFNGLTEXCOORD4D              glTexCoord4d;
        static PFNGLTEXCOORD4F              glTexCoord4f;
        static PFNGLTEXCOORD4I              glTexCoord4i;
        static PFNGLTEXCOORD4S              glTexCoord4s;
        static PFNGLTEXCOORD1DV             glTexCoord1dv;
        static PFNGLTEXCOORD1FV             glTexCoord1fv;
        static PFNGLTEXCOORD1IV             glTexCoord1iv;
        static PFNGLTEXCOORD1SV             glTexCoord1sv;
        static PFNGLTEXCOORD2DV             glTexCoord2dv;
        static PFNGLTEXCOORD2FV             glTexCoord2fv;
        static PFNGLTEXCOORD2IV             glTexCoord2iv;
        static PFNGLTEXCOORD2SV             glTexCoord2sv;
        static PFNGLTEXCOORD3DV             glTexCoord3dv;
        static PFNGLTEXCOORD3FV             glTexCoord3fv;
        static PFNGLTEXCOORD3IV             glTexCoord3iv;
        static PFNGLTEXCOORD3SV             glTexCoord3sv;
        static PFNGLTEXCOORD4DV             glTexCoord4dv;
        static PFNGLTEXCOORD4FV             glTexCoord4fv;
        static PFNGLTEXCOORD4IV             glTexCoord4iv;
        static PFNGLTEXCOORD4SV             glTexCoord4sv;
        static PFNGLRASTERPOS2D             glRasterPos2d;
        static PFNGLRASTERPOS2F             glRasterPos2f;
        static PFNGLRASTERPOS2I             glRasterPos2i;
        static PFNGLRASTERPOS2S             glRasterPos2s;
        static PFNGLRASTERPOS3D             glRasterPos3d;
        static PFNGLRASTERPOS3F             glRasterPos3f;
        static PFNGLRASTERPOS3I             glRasterPos3i;
        static PFNGLRASTERPOS3S             glRasterPos3s;
        static PFNGLRASTERPOS4D             glRasterPos4d;
        static PFNGLRASTERPOS4F             glRasterPos4f;
        static PFNGLRASTERPOS4I             glRasterPos4i;
        static PFNGLRASTERPOS4S             glRasterPos4s;
        static PFNGLRASTERPOS2DV            glRasterPos2dv;
        static PFNGLRASTERPOS2FV            glRasterPos2fv;
        static PFNGLRASTERPOS2IV            glRasterPos2iv;
        static PFNGLRASTERPOS2SV            glRasterPos2sv;
        static PFNGLRASTERPOS3DV            glRasterPos3dv;
        static PFNGLRASTERPOS3FV            glRasterPos3fv;
        static PFNGLRASTERPOS3IV            glRasterPos3iv;
        static PFNGLRASTERPOS3SV            glRasterPos3sv;
        static PFNGLRASTERPOS4DV            glRasterPos4dv;
        static PFNGLRASTERPOS4FV            glRasterPos4fv;
        static PFNGLRASTERPOS4IV            glRasterPos4iv;
        static PFNGLRASTERPOS4SV            glRasterPos4sv;
        static PFNGLRECTD                   glRectd;
        static PFNGLRECTF                   glRectf;
        static PFNGLRECTI                   glRecti;
        static PFNGLRECTS                   glRects;
        static PFNGLRECTDV                  glRectdv;
        static PFNGLRECTFV                  glRectfv;
        static PFNGLRECTIV                  glRectiv;
        static PFNGLRECTSV                  glRectsv;

        // Lighting
        static PFNGLSHADEMODEL              glShadeModel;
        static PFNGLLIGHTF                  glLightf;
        static PFNGLLIGHTI                  glLighti;
        static PFNGLLIGHTFV                 glLightfv;
        static PFNGLLIGHTIV                 glLightiv;
        static PFNGLGETLIGHTFV              glGetLightfv;
        static PFNGLGETLIGHTIV              glGetLightiv;
        static PFNGLLIGHTMODELF             glLightModelf;
        static PFNGLLIGHTMODELI             glLightModeli;
        static PFNGLLIGHTMODELFV            glLightModelfv;
        static PFNGLLIGHTMODELIV            glLightModeliv;
        static PFNGLMATERIALF               glMaterialf;
        static PFNGLMATERIALI               glMateriali;
        static PFNGLMATERIALFV              glMaterialfv;
        static PFNGLMATERIALIV              glMaterialiv;
        static PFNGLGETMATERIALFV           glGetMaterialfv;
        static PFNGLGETMATERIALIV           glGetMaterialiv;
        static PFNGLCOLORMATERIAL           glColorMaterial;

        // Raster functions
        static PFNGLPIXELZOOM               glPixelZoom;
        static PFNGLPIXELSTOREF             glPixelStoref;
        static PFNGLPIXELSTOREI             glPixelStorei;
        static PFNGLPIXELTRANSFERF          glPixelTransferf;
        static PFNGLPIXELTRANSFERI          glPixelTransferi;
        static PFNGLPIXELMAPFV              glPixelMapfv;
        static PFNGLPIXELMAPUIV             glPixelMapuiv;
        static PFNGLPIXELMAPUSV             glPixelMapusv;
        static PFNGLGETPIXELMAPFV           glGetPixelMapfv;
        static PFNGLGETPIXELMAPUIV          glGetPixelMapuiv;
        static PFNGLGETPIXELMAPUSV          glGetPixelMapusv;
        static PFNGLBITMAP                  glBitmap;
        static PFNGLREADPIXELS              glReadPixels;
        static PFNGLDRAWPIXELS              glDrawPixels;
        static PFNGLCOPYPIXELS              glCopyPixels;

        // Stenciling
        static PFNGLSTENCILFUNC             glStencilFunc;
        static PFNGLSTENCILMASK             glStencilMask;
        static PFNGLSTENCILOP               glStencilOp;
        static PFNGLCLEARSTENCIL            glClearStencil;

        // Texture mapping
        static PFNGLTEXGEND                 glTexGend;
        static PFNGLTEXGENF                 glTexGenf;
        static PFNGLTEXGENI                 glTexGeni;
        static PFNGLTEXGENDV                glTexGendv;
        static PFNGLTEXGENFV                glTexGenfv;
        static PFNGLTEXGENIV                glTexGeniv;
        static PFNGLGETTEXGENDV             glGetTexGendv;
        static PFNGLGETTEXGENFV             glGetTexGenfv;
        static PFNGLGETTEXGENIV             glGetTexGeniv;
        static PFNGLTEXENVF                 glTexEnvf;
        static PFNGLTEXENVI                 glTexEnvi;
        static PFNGLTEXENVFV                glTexEnvfv;
        static PFNGLTEXENVIV                glTexEnviv;
        static PFNGLGETTEXENVFV             glGetTexEnvfv;
        static PFNGLGETTEXENVIV             glGetTexEnviv;
        static PFNGLTEXPARAMETERF           glTexParameterf;
        static PFNGLTEXPARAMETERI           glTexParameteri;
        static PFNGLTEXPARAMETERFV          glTexParameterfv;
        static PFNGLTEXPARAMETERIV          glTexParameteriv;
        static PFNGLGETTEXPARAMETERFV       glGetTexParameterfv;
        static PFNGLGETTEXPARAMETERIV       glGetTexParameteriv;
        static PFNGLGETTEXLEVELPARAMETERFV  glGetTexLevelParameterfv;
        static PFNGLGETTEXLEVELPARAMETERIV  glGetTexLevelParameteriv;
        static PFNGLTEXIMAGE1D              glTexImage1D;
        static PFNGLTEXIMAGE2D              glTexImage2D;
        static PFNGLGETTEXIMAGE             glGetTexImage;

        // Evaluators
        static PFNGLMAP1D                   glMap1d;
        static PFNGLMAP1F                   glMap1f;
        static PFNGLMAP2D                   glMap2d;
        static PFNGLMAP2F                   glMap2f;
        static PFNGLGETMAPDV                glGetMapdv;
        static PFNGLGETMAPFV                glGetMapfv;
        static PFNGLGETMAPIV                glGetMapiv;
        static PFNGLEVALCOORD1D             glEvalCoord1d;
        static PFNGLEVALCOORD1F             glEvalCoord1f;
        static PFNGLEVALCOORD1DV            glEvalCoord1dv;
        static PFNGLEVALCOORD1FV            glEvalCoord1fv;
        static PFNGLEVALCOORD2D             glEvalCoord2d;
        static PFNGLEVALCOORD2F             glEvalCoord2f;
        static PFNGLEVALCOORD2DV            glEvalCoord2dv;
        static PFNGLEVALCOORD2FV            glEvalCoord2fv;
        static PFNGLMAPGRID1D               glMapGrid1d;
        static PFNGLMAPGRID1F               glMapGrid1f;
        static PFNGLMAPGRID2D               glMapGrid2d;
        static PFNGLMAPGRID2F               glMapGrid2f;
        static PFNGLEVALPOINT1              glEvalPoint1;
        static PFNGLEVALPOINT2              glEvalPoint2;
        static PFNGLEVALMESH1               glEvalMesh1;
        static PFNGLEVALMESH2               glEvalMesh2;

        // Fog
        static PFNGLFOGF                    glFogf;
        static PFNGLFOGI                    glFogi;
        static PFNGLFOGFV                   glFogfv;
        static PFNGLFOGIV                   glFogiv;

        // Selection and Feedback
        static PFNGLFEEDBACKBUFFER          glFeedbackBuffer;
        static PFNGLPASSTHROUGH             glPassThrough;
        static PFNGLSELECTBUFFER            glSelectBuffer;
        static PFNGLINITNAMES               glInitNames;
        static PFNGLLOADNAME                glLoadName;
        static PFNGLPUSHNAME                glPushName;
        static PFNGLPOPNAME                 glPopName;

        // 1.1 functions
        // texture objects
        static PFNGLGENTEXTURES             glGenTextures;
        static PFNGLDELETETEXTURES          glDeleteTextures;
        static PFNGLBINDTEXTURE             glBindTexture;
        static PFNGLPRIORITIZETEXTURES      glPrioritizeTextures;
        static PFNGLARETEXTURESRESIDENT     glAreTexturesResident;
        static PFNGLISTEXTURE               glIsTexture;
        // texture mapping
        static PFNGLTEXSUBIMAGE1D           glTexSubImage1D;
        static PFNGLTEXSUBIMAGE2D           glTexSubImage2D;
        static PFNGLCOPYTEXIMAGE1D          glCopyTexImage1D;
        static PFNGLCOPYTEXIMAGE2D          glCopyTexImage2D;
        static PFNGLCOPYTEXSUBIMAGE1D       glCopyTexSubImage1D;
        static PFNGLCOPYTEXSUBIMAGE2D       glCopyTexSubImage2D;
        // vertex arrays
        static PFNGLVERTEXPOINTER           glVertexPointer;
        static PFNGLNORMALPOINTER           glNormalPointer;
        static PFNGLCOLORPOINTER            glColorPointer;
        static PFNGLINDEXPOINTER            glIndexPointer;
        static PFNGLTEXCOORDPOINTER         glTexCoordPointer;
        static PFNGLEDGEFLAGPOINTER         glEdgeFlagPointer;
        static PFNGLGETPOINTERV             glGetPointerv;
        static PFNGLARRAYELEMENT            glArrayElement;
        static PFNGLDRAWARRAYS              glDrawArrays;
        static PFNGLDRAWELEMENTS            glDrawElements;
        static PFNGLINTERLEAVEDARRAYS       glInterleavedArrays;

        // 1.2 functions
        static PFNGLBLENDCOLORPROC          glBlendColor;
        static PFNGLBLENDEQUATIONPROC       glBlendEquation;
        static PFNGLDRAWRANGEELEMENTSPROC   glDrawRangeElements;
        static PFNGLCOLORTABLEPROC          glColorTable;
        static PFNGLCOLORTABLEPARAMETERFVPROC glColorTableParameterfv;
        static PFNGLCOLORTABLEPARAMETERIVPROC glColorTableParameteriv;
        static PFNGLCOPYCOLORTABLEPROC      glCopyColorTable;
        static PFNGLGETCOLORTABLEPROC       glGetColorTable;
        static PFNGLGETCOLORTABLEPARAMETERFVPROC glGetColorTableParameterfv;
        static PFNGLGETCOLORTABLEPARAMETERIVPROC glGetColorTableParameteriv;
        static PFNGLCOLORSUBTABLEPROC       glColorSubTable;
        static PFNGLCOPYCOLORSUBTABLEPROC   glCopyColorSubTable;
        static PFNGLCONVOLUTIONFILTER1DPROC glConvolutionFilter1D;
        static PFNGLCONVOLUTIONFILTER2DPROC glConvolutionFilter2D;
        static PFNGLCONVOLUTIONPARAMETERFPROC glConvolutionParameterf;
        static PFNGLCONVOLUTIONPARAMETERFVPROC glConvolutionParameterfv;
        static PFNGLCONVOLUTIONPARAMETERIPROC  glConvolutionParameteri;
        static PFNGLCONVOLUTIONPARAMETERIVPROC glConvolutionParameteriv;
        static PFNGLCOPYCONVOLUTIONFILTER1DPROC glCopyConvolutionFilter1D;
        static PFNGLCOPYCONVOLUTIONFILTER2DPROC glCopyConvolutionFilter2D;
        static PFNGLGETCONVOLUTIONFILTERPROC    glGetConvolutionFilter;
        static PFNGLGETCONVOLUTIONPARAMETERFVPROC glGetConvolutionParameterfv;
        static PFNGLGETCONVOLUTIONPARAMETERIVPROC glGetConvolutionParameteriv;
        static PFNGLGETSEPARABLEFILTERPROC  glGetSeparableFilter;
        static PFNGLSEPARABLEFILTER2DPROC   glSeparableFilter2D;
        static PFNGLGETHISTOGRAMPROC        glGetHistogram;
        static PFNGLGETHISTOGRAMPARAMETERFVPROC glGetHistogramParameterfv;
        static PFNGLGETHISTOGRAMPARAMETERIVPROC glGetHistogramParameteriv;
        static PFNGLGETMINMAXPROC           glGetMinmax;
        static PFNGLGETMINMAXPARAMETERFVPROC glGetMinmaxParameterfv;
        static PFNGLGETMINMAXPARAMETERIVPROC glGetMinmaxParameteriv;
        static PFNGLHISTOGRAMPROC           glHistogram;
        static PFNGLMINMAXPROC              glMinmax;
        static PFNGLRESETHISTOGRAMPROC      glResetHistogram;
        static PFNGLRESETMINMAXPROC         glResetMinmax;
        static PFNGLTEXIMAGE3DPROC          glTexImage3D;
        static PFNGLTEXSUBIMAGE3DPROC       glTexSubImage3D;
        static PFNGLCOPYTEXSUBIMAGE3DPROC   glCopyTexSubImage3D;

        // 1.3 functions
        static PFNGLACTIVETEXTUREPROC       glActiveTexture;
        static PFNGLCLIENTACTIVETEXTUREPROC glClientActiveTexture;
        static PFNGLMULTITEXCOORD1DPROC     glMultiTexCoord1d;
        static PFNGLMULTITEXCOORD1DVPROC    glMultiTexCoord1dv;
        static PFNGLMULTITEXCOORD1FPROC     glMultiTexCoord1f;
        static PFNGLMULTITEXCOORD1FVPROC    glMultiTexCoord1fv;
        static PFNGLMULTITEXCOORD1IPROC     glMultiTexCoord1i;
        static PFNGLMULTITEXCOORD1IVPROC    glMultiTexCoord1iv;
        static PFNGLMULTITEXCOORD1SPROC     glMultiTexCoord1s;
        static PFNGLMULTITEXCOORD1SVPROC    glMultiTexCoord1sv;
        static PFNGLMULTITEXCOORD2DPROC     glMultiTexCoord2d;
        static PFNGLMULTITEXCOORD2DVPROC    glMultiTexCoord2dv;
        static PFNGLMULTITEXCOORD2FPROC     glMultiTexCoord2f;
        static PFNGLMULTITEXCOORD2FVPROC    glMultiTexCoord2fv;
        static PFNGLMULTITEXCOORD2IPROC     glMultiTexCoord2i;
        static PFNGLMULTITEXCOORD2IVPROC    glMultiTexCoord2iv;
        static PFNGLMULTITEXCOORD2SPROC     glMultiTexCoord2s;
        static PFNGLMULTITEXCOORD2SVPROC    glMultiTexCoord2sv;
        static PFNGLMULTITEXCOORD3DPROC     glMultiTexCoord3d;
        static PFNGLMULTITEXCOORD3DVPROC    glMultiTexCoord3dv;
        static PFNGLMULTITEXCOORD3FPROC     glMultiTexCoord3f;
        static PFNGLMULTITEXCOORD3FVPROC    glMultiTexCoord3fv;
        static PFNGLMULTITEXCOORD3IPROC     glMultiTexCoord3i;
        static PFNGLMULTITEXCOORD3IVPROC    glMultiTexCoord3iv;
        static PFNGLMULTITEXCOORD3SPROC     glMultiTexCoord3s;
        static PFNGLMULTITEXCOORD3SVPROC    glMultiTexCoord3sv;
        static PFNGLMULTITEXCOORD4DPROC     glMultiTexCoord4d;
        static PFNGLMULTITEXCOORD4DVPROC    glMultiTexCoord4dv;
        static PFNGLMULTITEXCOORD4FPROC     glMultiTexCoord4f;
        static PFNGLMULTITEXCOORD4FVPROC    glMultiTexCoord4fv;
        static PFNGLMULTITEXCOORD4IPROC     glMultiTexCoord4i;
        static PFNGLMULTITEXCOORD4IVPROC    glMultiTexCoord4iv;
        static PFNGLMULTITEXCOORD4SPROC     glMultiTexCoord4s;
        static PFNGLMULTITEXCOORD4SVPROC    glMultiTexCoord4sv;
        static PFNGLLOADTRANSPOSEMATRIXFPROC glLoadTransposeMatrixf;
        static PFNGLLOADTRANSPOSEMATRIXDPROC glLoadTransposeMatrixd;
        static PFNGLMULTTRANSPOSEMATRIXFPROC glMultTransposeMatrixf;
        static PFNGLMULTTRANSPOSEMATRIXDPROC glMultTransposeMatrixd;
        static PFNGLSAMPLECOVERAGEPROC      glSampleCoverage;
        static PFNGLCOMPRESSEDTEXIMAGE3DPROC glCompressedTexImage3D;
        static PFNGLCOMPRESSEDTEXIMAGE2DPROC glCompressedTexImage2D;
        static PFNGLCOMPRESSEDTEXIMAGE1DPROC glCompressedTexImage1D;
        static PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glCompressedTexSubImage3D;
        static PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glCompressedTexSubImage2D;
        static PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glCompressedTexSubImage1D;
        static PFNGLGETCOMPRESSEDTEXIMAGEPROC glGetCompressedTexImage;
        // 1.4 functions
        static PFNGLBLENDFUNCSEPARATEPROC   glBlendFuncSeparate;
        static PFNGLFOGCOORDFPROC           glFogCoordf;
        static PFNGLFOGCOORDFVPROC          glFogCoordfv;
        static PFNGLFOGCOORDDPROC           glFogCoordd;
        static PFNGLFOGCOORDDVPROC          glFogCoorddv;
        static PFNGLFOGCOORDPOINTERPROC     glFogCoordPointer;
        static PFNGLMULTIDRAWARRAYSPROC     glMultiDrawArrays;
        static PFNGLMULTIDRAWELEMENTSPROC   glMultiDrawElements;
        static PFNGLPOINTPARAMETERFPROC     glPointParameterf;
        static PFNGLPOINTPARAMETERFVPROC    glPointParameterfv;
        static PFNGLPOINTPARAMETERIPROC     glPointParameteri;
        static PFNGLPOINTPARAMETERIVPROC    glPointParameteriv;
        static PFNGLSECONDARYCOLOR3BPROC    glSecondaryColor3b;
        static PFNGLSECONDARYCOLOR3BVPROC   glSecondaryColor3bv;
        static PFNGLSECONDARYCOLOR3DPROC    glSecondaryColor3d;
        static PFNGLSECONDARYCOLOR3DVPROC   glSecondaryColor3dv;
        static PFNGLSECONDARYCOLOR3FPROC    glSecondaryColor3f;
        static PFNGLSECONDARYCOLOR3FVPROC   glSecondaryColor3fv;
        static PFNGLSECONDARYCOLOR3IPROC    glSecondaryColor3i;
        static PFNGLSECONDARYCOLOR3IVPROC   glSecondaryColor3iv;
        static PFNGLSECONDARYCOLOR3SPROC    glSecondaryColor3s;
        static PFNGLSECONDARYCOLOR3SVPROC   glSecondaryColor3sv;
        static PFNGLSECONDARYCOLOR3UBPROC   glSecondaryColor3ub;
        static PFNGLSECONDARYCOLOR3UBVPROC  glSecondaryColor3ubv;
        static PFNGLSECONDARYCOLOR3UIPROC   glSecondaryColor3ui;
        static PFNGLSECONDARYCOLOR3UIVPROC  glSecondaryColor3uiv;
        static PFNGLSECONDARYCOLOR3USPROC   glSecondaryColor3us;
        static PFNGLSECONDARYCOLOR3USVPROC  glSecondaryColor3usv;
        static PFNGLSECONDARYCOLORPOINTERPROC glSecondaryColorPointer;
        static PFNGLWINDOWPOS2DPROC         glWindowPos2d;
        static PFNGLWINDOWPOS2DVPROC        glWindowPos2dv;
        static PFNGLWINDOWPOS2FPROC         glWindowPos2f;
        static PFNGLWINDOWPOS2FVPROC        glWindowPos2fv;
        static PFNGLWINDOWPOS2IPROC         glWindowPos2i;
        static PFNGLWINDOWPOS2IVPROC        glWindowPos2iv;
        static PFNGLWINDOWPOS2SPROC         glWindowPos2s;
        static PFNGLWINDOWPOS2SVPROC        glWindowPos2sv;
        static PFNGLWINDOWPOS3DPROC         glWindowPos3d;
        static PFNGLWINDOWPOS3DVPROC        glWindowPos3dv;
        static PFNGLWINDOWPOS3FPROC         glWindowPos3f;
        static PFNGLWINDOWPOS3FVPROC        glWindowPos3fv;
        static PFNGLWINDOWPOS3IPROC         glWindowPos3i;
        static PFNGLWINDOWPOS3IVPROC        glWindowPos3iv;
        static PFNGLWINDOWPOS3SPROC         glWindowPos3s;
        static PFNGLWINDOWPOS3SVPROC        glWindowPos3sv;
        // 1.5 functions
        static PFNGLGENQUERIESPROC          glGenQueries;
        static PFNGLDELETEQUERIESPROC       glDeleteQueries;
        static PFNGLISQUERYPROC             glIsQuery;
        static PFNGLBEGINQUERYPROC          glBeginQuery;
        static PFNGLENDQUERYPROC            glEndQuery;
        static PFNGLGETQUERYIVPROC          glGetQueryiv;
        static PFNGLGETQUERYOBJECTIVPROC    glGetQueryObjectiv;
        static PFNGLGETQUERYOBJECTUIVPROC   glGetQueryObjectuiv;
        static PFNGLBINDBUFFERPROC          glBindBuffer;
        static PFNGLDELETEBUFFERSPROC       glDeleteBuffers;
        static PFNGLGENBUFFERSPROC          glGenBuffers;
        static PFNGLISBUFFERPROC            glIsBuffer;
        static PFNGLBUFFERDATAPROC          glBufferData;
        static PFNGLBUFFERSUBDATAPROC       glBufferSubData;
        static PFNGLGETBUFFERSUBDATAPROC    glGetBufferSubData;
        static PFNGLMAPBUFFERPROC           glMapBuffer;
        static PFNGLUNMAPBUFFERPROC         glUnmapBuffer;
        static PFNGLGETBUFFERPARAMETERIVPROC glGetBufferParameteriv;
        static PFNGLGETBUFFERPOINTERVPROC   glGetBufferPointerv;
        // 2.0 functions
        static PFNGLBLENDEQUATIONSEPARATEPROC glBlendEquationSeparate;
        static PFNGLDRAWBUFFERSPROC         glDrawBuffers;
        static PFNGLSTENCILOPSEPARATEPROC   glStencilOpSeparate;
        static PFNGLSTENCILFUNCSEPARATEPROC glStencilFuncSeparate;
        static PFNGLSTENCILMASKSEPARATEPROC glStencilMaskSeparate;
        static PFNGLATTACHSHADERPROC        glAttachShader;
        static PFNGLBINDATTRIBLOCATIONPROC  glBindAttribLocation;
        static PFNGLCOMPILESHADERPROC       glCompileShader;
        static PFNGLCREATEPROGRAMPROC       glCreateProgram;
        static PFNGLCREATESHADERPROC        glCreateShader;
        static PFNGLDELETEPROGRAMPROC       glDeleteProgram;
        static PFNGLDELETESHADERPROC        glDeleteShader;
        static PFNGLDETACHSHADERPROC        glDetachShader;
        static PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
        static PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
        static PFNGLGETACTIVEATTRIBPROC     glGetActiveAttrib;
        static PFNGLGETACTIVEUNIFORMPROC    glGetActiveUniform;
        static PFNGLGETATTACHEDSHADERSPROC  glGetAttachedShaders;
        static PFNGLGETATTRIBLOCATIONPROC   glGetAttribLocation;
        static PFNGLGETPROGRAMIVPROC        glGetProgramiv;
        static PFNGLGETPROGRAMINFOLOGPROC   glGetProgramInfoLog;
        static PFNGLGETSHADERIVPROC         glGetShaderiv;
        static PFNGLGETSHADERINFOLOGPROC    glGetShaderInfoLog;
        static PFNGLGETSHADERSOURCEPROC     glGetShaderSource;
        static PFNGLGETUNIFORMLOCATIONPROC  glGetUniformLocation;
        static PFNGLGETUNIFORMFVPROC        glGetUniformfv;
        static PFNGLGETUNIFORMIVPROC        glGetUniformiv;
        static PFNGLGETVERTEXATTRIBDVPROC   glGetVertexAttribdv;
        static PFNGLGETVERTEXATTRIBFVPROC   glGetVertexAttribfv;
        static PFNGLGETVERTEXATTRIBIVPROC   glGetVertexAttribiv;
        static PFNGLGETVERTEXATTRIBPOINTERVPROC glGetVertexAttribPointerv;
        static PFNGLISPROGRAMPROC           glIsProgram;
        static PFNGLISSHADERPROC            glIsShader;
        static PFNGLLINKPROGRAMPROC         glLinkProgram;
        static PFNGLSHADERSOURCEPROC        glShaderSource;
        static PFNGLUSEPROGRAMPROC          glUseProgram;
        static PFNGLUNIFORM1FPROC           glUniform1f;
        static PFNGLUNIFORM2FPROC           glUniform2f;
        static PFNGLUNIFORM3FPROC           glUniform3f;
        static PFNGLUNIFORM4FPROC           glUniform4f;
        static PFNGLUNIFORM1IPROC           glUniform1i;
        static PFNGLUNIFORM2IPROC           glUniform2i;
        static PFNGLUNIFORM3IPROC           glUniform3i;
        static PFNGLUNIFORM4IPROC           glUniform4i;
        static PFNGLUNIFORM1FVPROC          glUniform1fv;
        static PFNGLUNIFORM2FVPROC          glUniform2fv;
        static PFNGLUNIFORM3FVPROC          glUniform3fv;
        static PFNGLUNIFORM4FVPROC          glUniform4fv;
        static PFNGLUNIFORM1IVPROC          glUniform1iv;
        static PFNGLUNIFORM2IVPROC          glUniform2iv;
        static PFNGLUNIFORM3IVPROC          glUniform3iv;
        static PFNGLUNIFORM4IVPROC          glUniform4iv;
        static PFNGLUNIFORMMATRIX2FVPROC    glUniformMatrix2fv;
        static PFNGLUNIFORMMATRIX3FVPROC    glUniformMatrix3fv;
        static PFNGLUNIFORMMATRIX4FVPROC    glUniformMatrix4fv;
        static PFNGLVALIDATEPROGRAMPROC     glValidateProgram;
        static PFNGLVERTEXATTRIB1DPROC      glVertexAttrib1d;
        static PFNGLVERTEXATTRIB1DVPROC     glVertexAttrib1dv;
        static PFNGLVERTEXATTRIB1FPROC      glVertexAttrib1f;
        static PFNGLVERTEXATTRIB1FVPROC     glVertexAttrib1fv;
        static PFNGLVERTEXATTRIB1SPROC      glVertexAttrib1s;
        static PFNGLVERTEXATTRIB1SVPROC     glVertexAttrib1sv;
        static PFNGLVERTEXATTRIB2DPROC      glVertexAttrib2d;
        static PFNGLVERTEXATTRIB2DVPROC     glVertexAttrib2dv;
        static PFNGLVERTEXATTRIB2FPROC      glVertexAttrib2f;
        static PFNGLVERTEXATTRIB2FVPROC     glVertexAttrib2fv;
        static PFNGLVERTEXATTRIB2SPROC      glVertexAttrib2s;
        static PFNGLVERTEXATTRIB2SVPROC     glVertexAttrib2sv;
        static PFNGLVERTEXATTRIB3DPROC      glVertexAttrib3d;
        static PFNGLVERTEXATTRIB3DVPROC     glVertexAttrib3dv;
        static PFNGLVERTEXATTRIB3FPROC      glVertexAttrib3f;
        static PFNGLVERTEXATTRIB3FVPROC     glVertexAttrib3fv;
        static PFNGLVERTEXATTRIB3SPROC      glVertexAttrib3s;
        static PFNGLVERTEXATTRIB3SVPROC     glVertexAttrib3sv;
        static PFNGLVERTEXATTRIB4NBVPROC    glVertexAttrib4Nbv;
        static PFNGLVERTEXATTRIB4NIVPROC    glVertexAttrib4Niv;
        static PFNGLVERTEXATTRIB4NSVPROC    glVertexAttrib4Nsv;
        static PFNGLVERTEXATTRIB4NUBPROC    glVertexAttrib4Nub;
        static PFNGLVERTEXATTRIB4NUBVPROC   glVertexAttrib4Nubv;
        static PFNGLVERTEXATTRIB4NUIVPROC   glVertexAttrib4Nuiv;
        static PFNGLVERTEXATTRIB4NUSVPROC   glVertexAttrib4Nusv;
        static PFNGLVERTEXATTRIB4BVPROC     glVertexAttrib4bv;
        static PFNGLVERTEXATTRIB4DPROC      glVertexAttrib4d;
        static PFNGLVERTEXATTRIB4DVPROC     glVertexAttrib4dv;
        static PFNGLVERTEXATTRIB4FPROC      glVertexAttrib4f;
        static PFNGLVERTEXATTRIB4FVPROC     glVertexAttrib4fv;
        static PFNGLVERTEXATTRIB4IVPROC     glVertexAttrib4iv;
        static PFNGLVERTEXATTRIB4SPROC      glVertexAttrib4s;
        static PFNGLVERTEXATTRIB4SVPROC     glVertexAttrib4sv;
        static PFNGLVERTEXATTRIB4UBVPROC    glVertexAttrib4ubv;
        static PFNGLVERTEXATTRIB4UIVPROC    glVertexAttrib4uiv;
        static PFNGLVERTEXATTRIB4USVPROC    glVertexAttrib4usv;
        static PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
        // 2.1 functions
        static PFNGLUNIFORMMATRIX2X3FVPROC  glUniformMatrix2x3fv;
        static PFNGLUNIFORMMATRIX3X2FVPROC  glUniformMatrix3x2fv;
        static PFNGLUNIFORMMATRIX2X4FVPROC  glUniformMatrix2x4fv;
        static PFNGLUNIFORMMATRIX4X2FVPROC  glUniformMatrix4x2fv;
        static PFNGLUNIFORMMATRIX3X4FVPROC  glUniformMatrix3x4fv;
        static PFNGLUNIFORMMATRIX4X3FVPROC  glUniformMatrix4x3fv;

    };

    bool InitializeOpenGLAPI(const char* _moduleName);
    void ReleaseOpenGLAPI();
}

#endif	// NANE_OGLAPI_H
